home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / gnome-applets-data / invest / preferences.py < prev    next >
Encoding:
Python Source  |  2009-04-23  |  3.7 KB  |  122 lines

  1. from gettext import gettext as _
  2. from os.path import join
  3. import gtk, gobject, gconf
  4. import invest
  5. from gettext import gettext as _
  6.  
  7. import cPickle
  8.  
  9. class PrefsDialog:
  10.     def __init__(self, applet):
  11.         self.ui = gtk.Builder()
  12.         self.ui.add_from_file(join(invest.BUILDER_DATA_DIR, "prefs-dialog.ui"))
  13.  
  14.         self.dialog = self.ui.get_object("preferences")
  15.         self.treeview = self.ui.get_object("stocks")
  16.         
  17.         self.ui.get_object("add").connect('clicked', self.on_add_stock)
  18.         self.ui.get_object("add").connect('activate', self.on_add_stock)
  19.         self.ui.get_object("remove").connect('clicked', self.on_remove_stock)
  20.         self.ui.get_object("remove").connect('activate', self.on_remove_stock)
  21.         self.treeview.connect('key-press-event', self.on_tree_keypress)
  22.  
  23.         self.typs = (str, float, float, float)
  24.         self.names = (_("Symbol"), _("Amount"), _("Price"), _("Commission"))
  25.         store = gtk.ListStore(*self.typs)
  26.         self.treeview.set_model(store)
  27.         self.model = store
  28.         
  29.         def on_cell_edited(cell, path, new_text, col, typ):
  30.             try:
  31.                 store[path][col] = typ(new_text)
  32.             except:
  33.                 pass
  34.         
  35.         def get_cell_data(column, cell, model, iter, data):
  36.             typ, col = data
  37.             if typ == int:
  38.                 cell.set_property('text', "%d" % typ(model[iter][col]))
  39.             elif typ == float:
  40.                 cell.set_property('text', "%.2f" % typ(model[iter][col]))
  41.             else:
  42.                 cell.set_property('text', typ(model[iter][col]))
  43.             
  44.         def create_cell (view, column, name, typ):
  45.             cell_description = gtk.CellRendererText ()
  46.             cell_description.set_property("editable", True)
  47.             cell_description.connect("edited", on_cell_edited, column, typ)
  48.             column_description = gtk.TreeViewColumn (name, cell_description)
  49.             if typ == str:
  50.                 column_description.set_attributes (cell_description, text=0)
  51.             if typ == float:
  52.                 column_description.set_cell_data_func(cell_description, get_cell_data, (float, column))
  53.             view.append_column(column_description)
  54.         
  55.  
  56.         for n in xrange (0, 4):
  57.             create_cell (self.treeview, n, self.names[n], self.typs[n])        
  58.         stock_items = invest.STOCKS.items ()
  59.         stock_items.sort ()
  60.         for key, purchases in stock_items:
  61.             for purchase in purchases:
  62.                 store.append([key, purchase["amount"], purchase["bought"], purchase["comission"]])
  63.  
  64.         try:
  65.             pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(join(invest.ART_DATA_DIR, "invest-16.png"), -1,-1)
  66.             self.dialog.set_icon(pixbuf)
  67.         except Exception, msg:
  68.             pass
  69.                 
  70.         self.sync_ui()
  71.         
  72.     def show_run_hide(self, explanation = ""):
  73.         expl = self.ui.get_object("explanation")
  74.         expl.set_markup(explanation)
  75.         self.dialog.show_all()
  76.         if explanation == "":
  77.             expl.hide()
  78.         self.dialog.run()
  79.         self.dialog.destroy()
  80.         
  81.         invest.STOCKS = {}
  82.         
  83.         def save_symbol(model, path, iter):
  84.             #if int(model[iter][1]) == 0 or float(model[iter][2]) < 0.0001:
  85.             #    return
  86.             
  87.             if not model[iter][0] in invest.STOCKS:
  88.                 invest.STOCKS[model[iter][0]] = []
  89.                 
  90.             invest.STOCKS[model[iter][0]].append({
  91.                 "amount": float(model[iter][1]),
  92.                 "bought": float(model[iter][2]),
  93.                 "comission": float(model[iter][3]),
  94.             })
  95.         self.model.foreach(save_symbol)
  96.         try:
  97.             cPickle.dump(invest.STOCKS, file(invest.STOCKS_FILE, 'w'))
  98.             if invest.DEBUGGING: print 'Stocks written to file'
  99.         except Exception, msg:
  100.             if invest.DEBUGGING: print 'Could not save stocks file:', msg
  101.             
  102.     
  103.     def sync_ui(self):
  104.         pass
  105.     
  106.     def on_add_stock(self, w):
  107.         self.treeview.get_model().append(["GOOG", 0, 0, 0])
  108.         
  109.     def on_remove_stock(self, w):
  110.         model, paths = self.treeview.get_selection().get_selected_rows()
  111.         for path in paths:
  112.             model.remove(model.get_iter(path))
  113.             
  114.     def on_tree_keypress(self, w, event):
  115.         if event.keyval == 65535:
  116.             self.on_remove_stock(self, w)
  117.             
  118.         return False
  119.         
  120. def show_preferences(applet, explanation = ""):
  121.     PrefsDialog(applet).show_run_hide(explanation)
  122.